import dayjs from "dayjs";

/**
 * 格式化日期时间
 * @param date 日期字符串或Date对象
 * @param formatStr 格式化字符串，默认为 'YYYY-MM-DD HH:mm:ss'
 * @returns 格式化后的日期字符串
 */
export function formatDateTime(
  date: string | Date,
  formatStr: string = "YYYY-MM-DD HH:mm:ss"
): string {
  if (!date) return "-";
  
  try {
    return dayjs(date).format(formatStr);
  } catch (error) {
    console.error("日期格式化失败:", error);
    return "-";
  }
}

/**
 * 格式化日期
 * @param date 日期字符串或Date对象
 * @returns 格式化后的日期字符串 (YYYY-MM-DD)
 */
export function formatDate(date: string | Date): string {
  return formatDateTime(date, "YYYY-MM-DD");
}

/**
 * 格式化时间
 * @param date 日期字符串或Date对象
 * @returns 格式化后的时间字符串 (YYYY-MM-DD HH:mm:ss)
 */
export function formatTime(date: string | Date): string {
  return formatDateTime(date, "YYYY-MM-DD HH:mm:ss");
}

/**
 * 相对时间格式化
 * @param date 日期字符串或Date对象
 * @returns 相对时间字符串
 */
export function formatRelativeTime(date: string | Date): string {
  if (!date) return "-";
  
  try {
    const dateObj = dayjs(date);
    const now = dayjs();
    const diff = now.diff(dateObj);
    
    const minutes = Math.floor(diff / (1000 * 60));
    const hours = Math.floor(diff / (1000 * 60 * 60));
    const days = Math.floor(diff / (1000 * 60 * 60 * 24));
    
    if (minutes < 1) {
      return "刚刚";
    } else if (minutes < 60) {
      return `${minutes}分钟前`;
    } else if (hours < 24) {
      return `${hours}小时前`;
    } else if (days < 7) {
      return `${days}天前`;
    } else {
      return formatDate(dateObj.toDate());
    }
  } catch (error) {
    console.error("相对时间格式化失败:", error);
    return "-";
  }
}